package com.sfh.base.util;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.InputFilter;
import android.text.InputType;
import android.text.Spanned;
import android.text.TextUtils;
import android.widget.EditText;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static android.text.TextUtils.isEmpty;

/**
 * 功能描述:
 *
 * @author SunFeihu 孙飞虎
 * @date 2017/7/20
 */
public final class UtilTool {


    /***
     * 限制字符
     * @param reg
     * @param string
     * @return
     */
    public static boolean startCheck(String reg, String string) {
        Pattern pattern = Pattern.compile(reg);
        Matcher matcher = pattern.matcher(string);
        boolean tem = matcher.matches();
        return tem;
    }



    /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {
        /*
         * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		 * 联通：130、131、132、152、155、156、185、186 电信：133、153、180、189、（1349卫通） 177
		 * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
		 */
        /*
        * 手机号放开第二位限制
		* 2016/10/17---yuankaixin
		*
		* */
        String telRegex = "[1]\\d{10}";// "[1]"代表第1位为数字1，"[3578]"代表第二位可以为3、5、7,8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (isEmpty (mobiles))
            return false;
        else
            return mobiles.matches (telRegex);
    }

    /**
     * 方法描述:网络连接 boolean
     *
     * @param context
     * @return
     */
    public static boolean isConnect(Context context) {

        // 获取手机所有连接管理对象（包括对wi-fi,net等连接的管理）
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService (Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                // 获取网络连接管理的对象
                NetworkInfo info = connectivity.getActiveNetworkInfo ();
                if (info != null && info.isConnected ()) {
                    // 判断当前网络是否已经连接
                    if (info.getState () == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
        } catch (Exception e) {
        }
        return false;
    }




    /**
     * 获取硬件设备信息
     *
     * @return wifi mac地址 + android设备唯一ID + android设备唯一标识
     */
    public static String getMacAddress(Context context) {

        String mac = "";
        String androidId = "";
        String deviceId = "";
        try {
            // 获取wifi管理器
            WifiManager wifiMng = (WifiManager) context.getSystemService (Context.WIFI_SERVICE);
            WifiInfo wifiInfor = wifiMng.getConnectionInfo ();
            mac = wifiInfor.getMacAddress ();
        } catch (Exception e) {
            e.printStackTrace ();
        }
        try {
            androidId = Settings.Secure.getString (context.getContentResolver (), Settings.Secure.ANDROID_ID);
        } catch (Exception e) {
            e.printStackTrace ();
        }
        try {
            deviceId = ((TelephonyManager) context.getSystemService (Context.TELEPHONY_SERVICE)).getDeviceId ();
        } catch (Exception e) {
            e.printStackTrace ();
        }

        String macSt = mac + androidId + deviceId;
        macSt = macSt.trim ();
        macSt = macSt.replace (":", "");
        return macSt;
    }

    /***
     * 设置输入框，在输入参数数据时，保存几位小数
     * @param et 输入控件
     * @param size 小数点
     */
    public static  void setEditTextInputType(EditText et, final int size) {

        et.setInputType (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        et.setFilters (new InputFilter[]{
                new InputFilter () {

                    @Override
                    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

//                        CharSequence source,  //输入的文字
//                        int start,  //开始位置
//                        int end,  //结束位置
//                        Spanned dest, //当前显示的内容
//                        int dstart,  //当前开始位置
//                        int dend //当前结束位置

                        // 内容长度
                        int cl = dest.length ();

                        // 输入的文字是.
                        if (TextUtils.equals (".", source)) {

                            //输入位置在第1位置
                            if (dstart == 0) {

                                // 当前输入框是否包含.
                                if (TextUtils.indexOf (dest, '.') > 0) {
                                    return "";
                                }
                                // 内容长度不能大于限制长度
                                if (cl > size) {
                                    return "";
                                }
                                return "0.";

                            } else {
                                // 已输入中间输入.
                                if (TextUtils.indexOf (dest, '.') > 0) {
                                    return "";
                                }
                                // 点的位置，后面有几位
                                if (cl - dstart > size) {
                                    return "";
                                }
                            }
                            return null;
                        }

                        // 输入其他内容
                        if (isEmpty (dest)) {
                            return null;
                        }

                        // 是否包含.
                        int index = TextUtils.indexOf (dest, '.');

                        if (index > 0) {
                            int mlength = TextUtils.substring (dest, index + 1, cl).length ();//点后面长度

                            if (mlength == size && dend > index) {

                                return "";
                            }
                        }

                        return null;
                    }
                }
        });
    }

    /**
     * 获取版本号
     *
     * @return 当前应用的版本号
     */
    public static String getVersion(Context context) {

        try {
            PackageManager manager = context.getPackageManager ();
            PackageInfo info = manager.getPackageInfo (context.getPackageName (), 0);
            String version = info.versionName;
            return version;
        } catch (Exception e) {
            e.printStackTrace ();
            return "";
        }
    }
}
